#include "Logger.h"
#include "LockFile.h"
#include <unistd.h>		// getpid
#include <sstream>		// stringstream
#include <ctime>		
#include <sys/types.h>	// getpid
#include "FuncionesAuxiliares.h"

#define ARCHIVO_LOG "log.txt"
#define TAMBUFFER 20

using namespace std;

int Logger::debug = 0;

Logger::Logger() {
}

Logger::~Logger() {
}


void Logger::loggear(std::string mensaje, std::string remitente) {
	if ( ! debug) return;
	LockFile lock((char*) ARCHIVO_LOG);
	lock.tomarLock();
	string res = darFormato(mensaje, remitente);
	lock.escribir((char*) res.c_str(), (int) res.size() );
	lock.liberarLock();
	lock.~LockFile();
}


void Logger::activarDebug() {
	Logger::debug = 1;
}


string Logger::getTimeStamp() {
	time_t rawtime;
	struct tm * timeinfo;
	char buffer[TAMBUFFER];
	time (&rawtime);
	timeinfo = localtime (&rawtime);
	strftime (buffer,TAMBUFFER,"%F %T ",timeinfo);
	return string(buffer);
}


string Logger::darFormato(std::string mensaje, std::string remitente) {
	string tiempo = getTimeStamp();
	string pid = itos(getpid());
	string sig = string("==");
	string esp = string(" ");
	string res = tiempo + esp + sig + pid + sig + esp;
	return res + remitente + string(": ") + mensaje + string("\n"); 
}
